iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

回溯法(Backtracking),為經過優化的暴力法,透過制定上下界找到答案,採用試錯的方式將所有可能性列出,只要無法得到有效的結果就不再循著該路徑往下運算,退回前面重新計算,重複嘗試直到可以找到答案前進或是發現該問題沒有答案。

範例說明 :

題目 : 給定一個整數數組 nums = [1, 2, 3],請找出所有可能排列。

Step 1 :使用一個空的列表來儲存當前的排列

Step 2 : 使用一個集合來儲存已經使用過的元素

Step 3 :

  • 若當前排列的長度等於 nums 的長度,將當前的排列放入答案中
  • 若當前排列的長度不等於 nums 的長度,將 nums 中未使用的元素放入當前排列,並儲存為已使用的元素,然後利用遞迴呼叫把自己放入下一個位置,最後進行回

Step 4 : 得到的答案為 [ [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1] ]

優點 :

  1. 可以處理多種問題,包括排列組合、數獨、八皇后等,運用的範圍廣泛
  2. 可以找到所有結果,系統性的搜尋所有可能性,能找到的答案不只一種

缺點 :

  1. 時間複雜度較高,因為可能需要遍歷所有組合的可能性
  2. 不適合大規模的問題,需要處理的量越大,回法的可用性越低
  3. 可能出現重複計算,導致運算的效率不佳

上一篇
Day12 Stack 題目3 : 739. Daily Temperatures
系列文
C++刷題:LeetCode Top 100 Liked13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言